initctl protocol
~~~~~~~~~~~~~~~~
Communication between init and telinit happens via a SOCK_STREAM
unix domain socket, usually named @initctl ("\0initctl", see unix(7)).

Only one command is transmitted per connection. To transmit more,
telinit must reconnect.
Whenever applicable, only one argument is transmitted per connection.
In other words, "telinit stop httpd ftpd ntpd" opens connection 3 times
and sends 3 commands: "stop httpd", "stop ftpd", "stop ntpd", one
for each connection.

Telinit (client) talks first, sending the command and write-closing
its side of the connection. Init (server) replies with a free-form
stream of data, which telinit is expected to pass to stderr.

Commands themselves consist of one-letter command code, followed by
optional argument.

Possible commands:

	?	output current state and the list of running processes
	5	switch to (primary) runlevel 5
	4e	switch to runlevel 4e
	+a	activate secondary runlevel a
	-cd	deactivate secondary runlevels c and d
	rname	restart process "name"
	sname	start process "name"
	tname	stop process "name"
	uname	unstop process "name"
	pname	pause process "name" (send SIGSTOP)
	wname	resume (wake) process "name" (send SIGCONT)
	hname	send SIGHUP to process "name"
	c	reconfigure
	R	reboot   = switch to runlevel 0, call reboot(CMD_REBOOT)
	H	halt     = switch to runlevel 0, call reboot(CMD_HALT)
	P	poweroff = switch to runlevel 0, call reboot(CMD_POWEROFF)

Check parsecmd() in init_cmds.c for the full list, and cmdtbl[] in telinit.c
for corresponding telinit commands.

Current implementation can only report immediate error, like bad entry
names or incorrect runlevel specification. This is because most commands
are deferred: the command itself only sets a flag, and the action
is performed during initpass() after closing telinit connection.


telinit q
~~~~~~~~~
In sysvinit, q can be used to reload, *or* to reset (rather long) timers,
essentially triggering restart attempt for failed entries.

Unlike sysvinit, sninit allows starting entries by name, so instead of
generic "telinit q" something more specific like "telinit start ftpd"
should be used.

At the same time, reconfiguration on whim is not exactly the best thing to do.
So q command was ditched, in favor of explicit "reload".

XXX: wouldn't it be better to leave q as a shorthand? Having more that one
     failed entry is not very likely.
